package com.boarsoft.boar.context;

import java.net.InetAddress;
import java.net.UnknownHostException;

import javax.servlet.http.HttpServletRequest;

import com.boarsoft.cache.Cache;

/**
 * 由Spring保证单例
 * 
 * @author Mac_J
 *
 */
public class ActionContext {
	/** 用于为Action提供缓存 */
	protected static Cache cache;

	/**
	 * 取得访问者IP
	 *
	 * @param request
	 * @return
	 */
	public static String getRemoteIp(HttpServletRequest request) {
		String ip = null;
		try {
			ip = request.getHeader("x-forwarded-for");
			if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
				ip = request.getHeader("Proxy-Client-IP");
			}
			if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
				ip = request.getHeader("WL-Proxy-Client-IP");
			}
			if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
				ip = request.getRemoteAddr();
				if (ip.equals("127.0.0.1")) {
					// 根据网卡取本机配置的IP
					InetAddress inet = null;
					try {
						inet = InetAddress.getLocalHost();
					} catch (UnknownHostException e) {
						e.printStackTrace();
					}
					ip = inet.getHostAddress();
				}
			}
			// 对于通过多个代理的情况，第一个IP为客户端真实IP,多个IP按照','分割
			if (ip != null && ip.length() > 15) { // "***.***.***.***".length()
				// = 15
				if (ip.indexOf(",") > 0) {
					ip = ip.substring(0, ip.indexOf(","));
				}
			}
		} catch (Exception e) {
			ip = "";
		}
		// ipAddress = this.getRequest().getRemoteAddr();

		return ip;
	}

	// private SysPowerBiz sysPowerBiz;

	public void init() {
		// TODO 分页查询所有TOKEN有效的用户信息，生成LOGON对象并放入缓存

		// 生成Logon对象，并放入缓存
		// Logon lg = new Logon();
		// lg.setCode(code);
		// lg.setEmail(uo.getEmail());
		// lg.setName(uo.getName());
		//
		// Cache cache = ActionContext.getCache();
		// cache.put("token", token, lg);
	}

	public void setCache(Cache cache) {
		ActionContext.cache = cache;
	}

	public static Cache getCache() {
		return cache;
	}
}
